Denkblockade
am 22.01.2005 15:56:39 von ingo.stoecker
Hallo,
ich habe eine Tabelle mit den Spalten "BESCHREIBUNG" und "URL". Ich möchte
nun in PHP daraus einen LINK generieren der in etwa so aussehen soll:
Wie kann ich das mit einer SELECT-Abfrage oder so erstellen?
Danke!
--
MfG,
Ingo Stöcker
www.kobe8.de
www.svwassmannsdorf.de
www.asbh-potsdam.de
www.ihrkuechenpartner.com
Re: Denkblockade
am 22.01.2005 19:48:52 von Richard Burghause
Am Sat, 22 Jan 2005 15:56:39 +0100 schrieb Ingo Stöcker:
> ich habe eine Tabelle mit den Spalten "BESCHREIBUNG" und "URL". Ich
> möchte nun in PHP daraus einen LINK generieren der in etwa so aussehen
> soll:
>
> Wie kann ich das mit einer SELECT-Abfrage oder so erstellen?
ich würde mal folgendes vorschlagen (unter der Annahme, dass du MySQL
verwendest):
mysql_connect('server_hostname','username','ganz geheimes passwort');
mysql_select_db('db_name');
$result =3D mysql_query('select URL, BESCHREIBUNG from links');
while (list($url,$beschreibung) =3D mysql_fetch_row($result))
{
echo "";
}
mysql_free_result($result);
mysql_close();
?>
Das macht zwar noch keine Abfragen, falls die Verbindung fehlschlägt
o.ä., auch sollte man noch entweder bei der Eingabe oder bei der Ausgabe
ein urlencode() drüber laufen lassen. Ich habe es bei mir mal kurz
getestet, es lief.
>=20
> Danke!
>=20
Bitteschön, ich nehm' dir einfach mal ab, dass es eine Denkblockade war,
kommt manchmal vor.
Gruß,
Richard
Re: Denkblockade
am 22.01.2005 19:57:21 von Markus Spee
Richard Burghause wrote:
> echo "";
Besser:
echo "
title=\"$beschreibung\">".htmlentities($beschreibung)."";
--
mfG.
Markus Spee
Re: Denkblockade
am 22.01.2005 20:25:06 von Richard Burghause
Am Sat, 22 Jan 2005 19:57:21 +0100 schrieb Markus Spee:
> Richard Burghause wrote:
> > echo "";
>=20
> Besser:
>=20
> echo "
> title=3D\"$beschreibung\">".htmlentities($beschreibung)."";
Ja, richtig. Ich sagte doch, es sei nicht ganz perfekt :) ... also
einigen wir uns darauf, dass man die Kontrollzeichen noch escapen muss.
Dann sollte man das beim Title-Attribut aber auch machen. Und die URL
sollte ja eigentlich schon url-encoded sein, wenn nicht, dann kann man
das auch noch machen, per urlencode().
Gruß,
Richard
Re: Denkblockade
am 22.01.2005 21:32:07 von Markus Spee
Richard Burghause wrote:
> Dann sollte man das beim Title-Attribut aber auch machen.
Stimmt, hatte ich übersehen :)
--
mfG.
Markus Spee
Re: Denkblockade
am 22.01.2005 21:46:52 von Michael Fesser
.oO(Markus Spee)
>Richard Burghause wrote:
>> echo "";
>
>Besser:
>
>echo "
>title=\"$beschreibung\">".htmlentities($beschreibung)."";
Übrigens: HTML erlaubt auch einfache Anführungszeichen:
echo "
mysql_select_db('db_name');
$result = mysql_query('select URL, BESCHREIBUNG from links');
while (list($url,$beschreibung) = mysql_fetch_row($result))
{
echo "";
}
mysql_free_result($result);
mysql_close();
?>
bringt genau das Ergebnis was ich benötige. Was du mit urlencode meinst weis
ich zwar nicht, aber werde ich wohl net brauchen. DANKE!
MfG,
Kobe #8
Re: Denkblockade
am 23.01.2005 16:44:01 von Thomas Hamacher
Ingo Stöcker schrieb:
> bringt genau das Ergebnis was ich benötige. Was du mit urlencode meinst weis
> ich zwar nicht, aber werde ich wohl net brauchen. DANKE!
urlencode() macht in diesem Zusammenhang keinen Sinn, aber du kannst im
Manual nachlesen, was die Funktion macht.
Sinnvoll ist hier htmlentites() oder htmlspecialchars(), falls $url z.B.
das & enthält, welches als Entity notiert werden muss, da du sonst
invalides HTML produzierst.
while(list($url, $beschr) = mysql_fetch_row($result)) {
$url = htmlentities($url);
$beschr = htmlentities($beschr);
echo "";
}
Re: Denkblockade
am 23.01.2005 19:00:33 von Richard Burghause
Am Sun, 23 Jan 2005 16:44:01 +0100 schrieb Thomas Hamacher:
> urlencode() macht in diesem Zusammenhang keinen Sinn, aber du kannst
> im Manual nachlesen, was die Funktion macht.
Ja, da hatte ich jetzt einen logischen Fehler drin. Wenn man den String
als URL codieren würde, dann würden ja alle Zeichen codiert, auch die,
die berechtigterweise Slashes und ähnliches enthalten.
Ich hatte in den letzten Tagen 'ne ganze Menge mit der Weitergabe von
URLs als GET-Parameter zu tun, da war das noch so drin :)
=20
> Sinnvoll ist hier htmlentites() oder htmlspecialchars(), falls $url
> z.B. das & enthält, welches als Entity notiert werden muss, da du
> sonst invalides HTML produzierst.
>=20
> while(list($url, $beschr) =3D mysql_fetch_row($result)) {
> $url =3D htmlentities($url);
> $beschr =3D htmlentities($beschr);
>=20
> echo "";
> }
Wenn man das noch einbaut, ist es schon wesentlich verbessert. Man
könnte dann noch mit mysql_num_rows() abfragen, ob überhaupt ein
Ergebnis-Set zurückgegeben wurde und falls das nicht der Fall ist
entsprechend reagieren.
Und eine Fehlerbehandlung, falls keine Verbindung zum Server aufgebaut
wurde (mysql_connect() gibt dann FALSE zurück) würde das Skript recht
zuverlässig machen.
Gruß,
Richard
Re: Denkblockade
am 23.01.2005 19:52:09 von Thomas Hamacher
Richard Burghause schrieb:
> Am Sun, 23 Jan 2005 16:44:01 +0100 schrieb Thomas Hamacher:
>>urlencode() macht in diesem Zusammenhang keinen Sinn, aber du kannst
>>im Manual nachlesen, was die Funktion macht.
> Ja, da hatte ich jetzt einen logischen Fehler drin. Wenn man den String
> als URL codieren würde, dann würden ja alle Zeichen codiert, auch die,
> die berechtigterweise Slashes und ähnliches enthalten.
ACK!
>>Sinnvoll ist hier htmlentites() oder htmlspecialchars(), falls $url
>>z.B. das & enthält, welches als Entity notiert werden muss, da du
>>sonst invalides HTML produzierst.
> Wenn man das noch einbaut, ist es schon wesentlich verbessert. Man
> könnte dann noch mit mysql_num_rows() abfragen, ob überhaupt ein
> Ergebnis-Set zurückgegeben wurde und falls das nicht der Fall ist
> entsprechend reagieren.
Eine leere Ergebnismenge ist ja kein Fehler, es muss daher nicht
unbedingt darauf reagiert werden. Was natürlich fehlt ist das
Errorhandling bei der Abfrage.
> Und eine Fehlerbehandlung, falls keine Verbindung zum Server aufgebaut
> wurde (mysql_connect() gibt dann FALSE zurück) würde das Skript recht
> zuverlässig machen.
$conn = mysql_connect('hostname', 'username', 'passwort');
if(!is_resource($conn) || !mysql_select_db('db_name')) {
echo "MySQL Fehler: " . mysql_error() . "
";
exit;
}
$result = mysql_query('select URL, BESCHREIBUNG from links');
if(!is_resource($result)) {
echo "MySQL Fehler: " . mysql_error() . "
";
exit;
}
while(list($url, $beschr) = mysql_fetch_row($result)) {
$url = htmlentities($url);
$beschr = htmlentities($beschr);
echo "";
}
So, jetzt ist es vollständig, aber sinnvoll ist es trotzdem nicht, weil
alle Beschreibungen direkt hintereinander geklatscht werden und weil
Aussehen und Programmlogik nicht getrennt sind.
Re: Denkblockade
am 23.01.2005 21:34:19 von Richard Burghause
Am Sun, 23 Jan 2005 19:52:09 +0100 schrieb Thomas Hamacher:
> Richard Burghause schrieb:
> > Man könnte dann noch mit mysql_num_rows() abfragen, ob überhaupt=20
> > ein Ergebnis-Set zurückgegeben wurde und falls das nicht der Fall
> > ist entsprechend reagieren.
> Eine leere Ergebnismenge ist ja kein Fehler, es muss daher nicht=20
> unbedingt darauf reagiert werden. Was natürlich fehlt ist das=20
> Errorhandling bei der Abfrage.
Ich dachte mir, dass bei leerer Ergebnismenge wenigstens etwas nach dem
Motto "keine Links gefunden" angezeigt werden sollte. Das ist für User
manchmal ganz hilfreich.
=20
> $conn =3D mysql_connect('hostname', 'username', 'passwort');
>=20
> if(!is_resource($conn) || !mysql_select_db('db_name')) {
> echo "MySQL Fehler: " . mysql_error() . "
";
> exit;
> }
>
> $result =3D mysql_query('select URL, BESCHREIBUNG from links');
>=20
> if(!is_resource($result)) {
> echo "MySQL Fehler: " . mysql_error() . "
";
> exit;
> }
ACK. Genau nach so was hatte ich noch gesucht. Gut gelöst würde ich
sagen.
> while(list($url, $beschr) =3D mysql_fetch_row($result)) {
> $url =3D htmlentities($url);
> $beschr =3D htmlentities($beschr);
>=20
> echo "";
> }
Ja, das sollte es jetzt eigentlich gewesen sein. Wie man die Ausgabe nun
gestaltet, sollte ja eigentlich der kleinere Teil sein, das ist dann ja
nur noch Variablen in Strings einfügen.
Gruß,
Richard
Re: Denkblockade
am 24.01.2005 01:47:34 von Bernd Goldschmidt
Michael Fesser wrote:
> Übrigens: HTML erlaubt auch einfache Anführungszeichen:
>
> echo "
Bernd
Re: Denkblockade
am 24.01.2005 01:57:08 von Thomas Hamacher
Bernd Goldschmidt schrieb:
> Michael Fesser wrote:
>> Übrigens: HTML erlaubt auch einfache Anführungszeichen:
>> echo "
Weil das kein Mensch lesen kann.
Re: Denkblockade
am 24.01.2005 11:55:40 von Bernd Goldschmidt
>>> Übrigens: HTML erlaubt auch einfache Anführungszeichen:
>> xhtml aber nicht mehr, also besser nicht verwenden.
> Quark.
Richtig. Man sollte nur der Spezifikation und keinen anderen Quellen
vertrauen. Sorry für die Fehlinformation.
>> Wieso nicht:
>> echo('
> Weil das kein Mensch lesen kann.
Ansichtssache. Ich kann das gut lesen und mit einem Editor mit
ordentlichem Syntaxhighlighting ist das wirklich probemlos möglich. Ich
quote html-Strings immer mit ', da ich massenhaft Escape-Zeichen drin
viel unleserlicher finde.
Bernd